package Figuras;

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Stroke;
import java.awt.geom.Line2D;
import java.awt.geom.Point2D;

public class Linea extends Figura {

    private Point2D puntoFinalDeLaLinea;

    // Funciones Básicas para creación y uso de la Figura:
    public Linea() {
        super();
        fijarPuntoFinalDeLaLinea(0, 0);
    }

    public Linea(Point2D puntoDeInicioDeLaLinea, Point2D puntoFinalDeLaLinea, Color colorDelBorde, int grosorDelBorde) {
        super(puntoDeInicioDeLaLinea, colorDelBorde, grosorDelBorde);
        fijarPuntoFinalDeLaLinea(puntoFinalDeLaLinea);
    }

    public Linea(int inicioCoordenadaX, int inicioCoordenadaY,
            int finalCoordenadaX, int finalCoordenadaY, Color colorDelBorde, int grosorDelBorde) {
        super(inicioCoordenadaX, inicioCoordenadaY, colorDelBorde, grosorDelBorde);
        fijarPuntoFinalDeLaLinea(finalCoordenadaX, finalCoordenadaY);
    }

    @Override
    public void dibujarLaFigura(Graphics dibujarLinea) {
        Graphics2D dibujarLinea2D;
        Line2D linea;
        Stroke bordeDeLaLinea;
        linea = new Line2D.Float((int) dameElInicioDeLaFigura().getX(), (int) dameElInicioDeLaFigura().getY(),
                (int) dameElPuntoFinalDeLaLinea().getX(), (int) dameElPuntoFinalDeLaLinea().getY());
        dibujarLinea2D = (Graphics2D) dibujarLinea;
        bordeDeLaLinea = new BasicStroke(dameElGrosorDelBordeDeLaFigura(), BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER);
        dibujarLinea2D.setColor(dameElColorDelBorde());
        dibujarLinea2D.setStroke(bordeDeLaLinea);
        dibujarLinea2D.draw(linea);
    }

    //El Siguiente método devuelve false por que no la linea no va a ser arrastrada
    @Override
    public boolean estaDentroDelAreaDeDibujo(int coordenadaX, int coordenadaY) {
        return (false);
    }

    //El Siguiente método no hace nada por que no hay que posicionar las lineas para dibujarlas pero la
    //abstraccion de métodos nos hace implementarla
    @Override
    public void fijarPosicionDeLaFigura(int coordenadaX, int coordenadaY) {
    }

    // Funciones Lógicas de la Figura:
    public final Point2D dameElPuntoFinalDeLaLinea() {
        return puntoFinalDeLaLinea;
    }

    public final void fijarPuntoFinalDeLaLinea(Point2D puntoFinalDeLaLinea) {
        this.puntoFinalDeLaLinea = puntoFinalDeLaLinea;
    }

    public final void fijarPuntoFinalDeLaLinea(int coordenadaX, int coordenadaY) {
        Point2D puntoFinalLinea = new Point2D.Double(coordenadaX, coordenadaY);
        this.puntoFinalDeLaLinea = puntoFinalLinea;
    }
}
